#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = "Administrator"
__name__="producter_demo"
__date__="2016/7/13"
__time__="11:23"
"""

from threading import Thread
from Queue import Queue
import time
# 生成者
class Producter(Thread):
    # 重写构造函数，如果不写则是执行父类的构造函数
    def __init__(self,name,queue):
        '''
        :param name: 生产者名字
        :param queue:容器
        '''
        self.__Name = name
        self.__Queue = queue
        # 执行父类的构造函数
        super(Producter,self).__init__()


    def run(self):
        # 工作内容
        while True:
            if self.__Queue.full():
                time.sleep(1)
            else:
                self.__Queue.put('baozi')
                time.sleep(1)
                print '%s create a baozi ' % (self.__Name,)
        #Thread.run(self)


# 消费者
class Consumer(Thread):
    def __init__(self,name,queue):
        '''
        :param name: 生产者名字
        :param queue:容器
        '''
        self.__Name = name
        self.__Queue = queue
        super(Consumer,self).__init__()
    def run(self):
        while True:
            if self.__Queue.empty():
                time.sleep(1)
            else:
                self.__Queue.get()
                time.sleep(1)
                print '%s eat a baozi' % (self.__Name)
        #Thread.run(self)

# 声明一个队列
que = Queue(maxsize=100)
# 创建了一个Producter的实例==创建了一个Thread的一个实例==创建了一个线程 ；
# 本例创建了三个线程(3个生产者)。
p1 = Producter('tom1',que)
p1.start()  # 等待CPU调度，一被调度，执行run方法

p2 = Producter('tom2',que)
p2.start()

p3 = Producter('tom3',que)
p3.start()

# 假如有20个消费者
for item in range(20):
    name =  'jon%d' % (item,)
    temp = Consumer(name,que)
    temp.start()


'''
q = Queue(maxsize=10)   # 存放数据，线程安全，先进先出
print q.qsize()
q.put('1')
q.put('2')
print 'empty:',q.empty()
print q.qsize() # 数据量
print 'get:',q.get()   # 一次只能取一个
print 'remain:',q.qsize()
print 'get',q.get()
print 'empty:',q.empty()
'''